# -*- coding: utf-8 -*-
"""
@Time    : 2024/6/26 16:02 
@Author  : ZhangShenao 
@File    : operations.py 
@Desc    : list列表的操作
list是用于存放若干元素的有序序列,其中的元素可以是任意类型
"""

# 创建list
items = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
print(f'items = {items}')

# 通过索引获取list中的元素
print(f'items[1] = {items[1]}')

# 获取元素对应的索引
# 如果有重复的元素,会返回该元素第一次出现的索引
print(f'items.index(1) = {items.index(1)}')

# 使用in关键字,查看元素是否在list中
#
letters = ['a', 'b', 'c', 'd', 'e']
print(f'"a" is in letters? {("a" in letters)}')  # True
print(f'"x" is in letter? {("x" in letters)}')  # False

# 使用count()函数,统计元素在list中出现的次数
nums = [1, 1, 2, 3, 4, 4, 4]
print(f'count of 4 is: {nums.count(4)}')  # 3
print(f'count of 10 is: {nums.count(10)}')  # 0

# 使用append()函数,向list末尾追加元素
letters = ['a', 'b']
letters.append('c')
letters.append('z')
print(f'letters = {letters}')

# 使用insert()函数,在list的指定索引位置插入元素
letters = ['a', 'b']
letters.insert(0, 'c')
letters.insert(2, 'd')
print(f'letters = {letters}')  # letters = ['c', 'a', 'd', 'b']

# 使用extend()函数,将一个list中的元素添加到另一个list中
letters = ['a', 'b']
letters.extend(['c', 'd', 'e'])
print(f'letters = {letters}')  # letters = ['a', 'b', 'c', 'd', 'e']

# 使用pop()函数,删除并返回list指定索引位置的元素
l1 = [1, 2, 3, 4, 5]
print(l1.pop(1))
print(l1.pop())  # 不指定索引,默认删除最后一个元素
print(f'l1 = {l1}')  # l1 = [1, 3, 4]

# 使用del关键字,删除list指定索引的元素
l2 = [1, 2, 4]
del l2[1]
print(f'l2 = {l2}')  # l2 = [1, 4]

# 使用remove()函数,删除list中第一个出现的指定元素
l3 = [1, 2, 3, 4, 5]
l3.remove(2)
print(f'l3 = {l3}')  # l3 = [1, 3, 4, 5])

# 使用clear()函数,清空list,返回空list[]
l4 = [1, 2, 3, 4, 5]
l4.clear()
print(f'l4 = {l4}')  # l4 = []

# 通过索引修改list中的元素
l5 = [1, 2, 3, 4, 5]
l5[2] += 10
print(f'l5 = {l5}')  # l5 = [1, 2, 13, 4, 5]

# 使用reverse()函数,反转整个list
l6 = [1, 2, 3, 4, 5]
l6.reverse()
print(f'l6 = {l6}')  # l6 = [5, 4, 3, 2, 1]

# 使用sort()函数,对list进行排序
l7 = [1, 99, -3, 4, -78]
l7.sort()  # 默认按照升序排序
print(f'l7 = {l7}')  # l7 = [-78, -3, 1, 4, 99]
l7.sort(reverse=True)  # 传入reverse=True,可以按照降序排序
print(f'l7 = {l7}')  # l7 = [99, 4, 1, -3, -78]

# 使用len()函数,获取list的长度
l8 = [1, 2, 3, 4, 5]
print(f'length of l8 is: {len(l8)}')  # length of l8 is: 5

# 使用[start_index:end_index]实现list的切片操作,是一个左闭右开区间
l9 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
l10 = l9[1:5]
print(f'l10 = {l10}')  # l10 = [2, 3, 4, 5]
print(f'l9 = {l9}')  # 切片操作会生成一个新的list,原list不变

# 使用+拼接两个list,生成一个新的list
l11 = [1, 2, 3]
l12 = [4, 5, 6]
l13 = l11 + l12
print(f'l13 = {l13}')  # l13 = [1, 2, 3, 4, 5, 6]
print(f'l11 = {l11}')  # 拼接后会生成一个新list,原list不变

# 使用*复制list,生成一个新的list
l14 = [1, 2, 3]
l15 = l14 * 3
print(f'l15 = {l15}')  # l15 = [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(f'l14 = {l14}')  # 复制后会生成一个新list,原list不变
